﻿#define _CRT_SECURE_NO_WARNINGS 1

//编程初学者入门训练第113题
//BC115 小乐乐与欧几里得
//https://www.nowcoder.com/practice/da13e0cf321e4df9acd0fdf0a433cbb0?tpId=107&tqId=33396&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D3%26tpId%3D107%26type%3D107&difficulty=undefined&judgeStatus=undefined&tags=&title=

//辗转相除法
//https://baike.baidu.com/item/%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97%E7%AE%97%E6%B3%95/1647675
//用递归来求
//mod是取余的意思

#include <stdio.h>

long long gcd(long long u, long long v) {
    // 确保a >= b，如果不是，则交换
    if (u < v) {
        long long temp = u;
        u = v;
        v = temp;
    }

    // 当b为0时，a就是最大公约数  
    if (v == 0) {
        return u;
    }
    else {
        // 递归调用欧几里得算法  
        return gcd(v, u % v);
    }
}

//欧几里得算法能用循环就不用递归
//while (v != 0) {
//    int tmp = u % v;
//    u = v;
//    v = tmp;
//}


int main() {
    long long num1 = 0;
    long long num2 = 0;

    scanf("%lld %lld", &num1, &num2);
    //辗转相除法求最大公约数
    long long ret = gcd(num1, num2);
    //最小公倍数等于两数之积除以其最大公约数
    long long result = (num1 * num2) / ret;

    printf("%lld\n", ret + result);


    return 0;
}